#include "app_valve_control.h"
#include "CJHR31.h"
#include "app_print.h"


/* ===================== 外部变量声明 ===================== */

// 温度数据存储在全局变量中
extern float TEMP_Value;


/* ===================== 函数实现 ===================== */

/**
 * @brief  电磁阀控制初始化
 * @param  None
 * @retval None
 * @note   电磁阀初始状态为开启,与user_config_init()保持一致
 */
void app_valve_control_init(void)
{
    // 电磁阀初始状态为开启(常开阀逻辑: 低电平=开启)
    Valve_Open;
    g_user_config.valve_is_open = 1;

    // 清除漏水检测标志
    g_user_config.leak_detected = 0;
    g_user_config.leak_protect_active = 0;

    #if DEBUG_APP_ENABLE
    APP_PRINT(APP_MODULE_VALVE, "Initialized - Valve opened\r\n");
    #endif
}


/**
 * @brief  更新湿度数据
 * @param  None
 * @retval None
 * @note   读取湿度传感器数据并更新到g_user_config
 */
void app_valve_update_humidity(void)
{
    CJHR31_Data_t humidity_data;
    s8 ret;

    // 读取当前温度 - 使用串口3采集的温度传感器数据
    s16 current_temp = (s16)(TEMP_Value);  // TEMP_Value单位为℃,CJHR31需要0.1℃

    // 读取湿度传感器
    ret = CJHR31_ReadHumidity(&humidity_data, current_temp);

    if (ret == CJHR31_OK)
    {
        // 更新湿度数据到全局配置
        g_user_config.humidity = humidity_data.humidity;

        #if DEBUG_APP_ENABLE
        // 调试输出(可选)
        // UART5_Printf("[Humidity] %.1f %%RH\r\n", g_user_config.humidity);
        #endif
    }
    else
    {
        // 读取失败,使用安全默认值(略高于阈值,防止误触发保护)
        if (g_user_config.humidity == 0.0f)
        {
            g_user_config.humidity = 30.0f;  // 给一个合理的初始值(小于阈值50%)
        }
        #if DEBUG_APP_ENABLE
        APP_PRINT(APP_MODULE_VALVE, "Humidity read failed, ret=%d\r\n", ret);
        #endif
    }
}


/**
 * @brief  电磁阀主控制逻辑(已简化为执行器)
 * @param  None
 * @retval None
 * @note   在主循环中周期性调用(建议100ms)
 *         电磁阀的开关逻辑已移至UV控制状态机,此函数仅负责读取湿度数据
 */
void app_valve_control_process(void)
{
    // 更新湿度数据(供UV状态机使用)
    app_valve_update_humidity();

    // 注意: 电磁阀的开关逻辑已由UV控制状态机(app_uv_control.c)决定
    // 状态机会根据湿度、流量、UV辐射度等条件直接控制电磁阀
    // 此函数仅保留湿度数据采集功能
}
